package 纯字符串;

import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Set;

public class No5740所有元音按顺序排布的最长子字符串 {

    /**
     * 当一个字符串满足如下条件时，我们称它是 美丽的 ：
     * 所有 5 个英文元音字母（'a' ，'e' ，'i' ，'o' ，'u'）都必须 至少 出现一次。
     * 这些元音字母的顺序都必须按照 字典序 升序排布（也就是说所有的 'a' 都在 'e' 前面，所有的 'e' 都在 'i' 前面，以此类推）
     * 比方说，字符串 "aeiou" 和 "aaaaaaeiiiioou" 都是 美丽的 ，但是 "uaeio" ，"aeoiu" 和 "aaaeeeooo" 不是美丽的 。
     * 给你一个只包含英文元音字母的字符串 word ，请你返回 word 中 最长美丽子字符串的长度 。如果不存在这样的子字符串，请返回 0 。
     * 子字符串 是字符串中一个连续的字符序列。
     *
     * 示例 1：
     * 输入：word = "aeiaaioaaaaeiiiiouuuooaauuaeiu"
     * 输出：13
     * 解释：最长子字符串是 "aaaaeiiiiouuu" ，长度为 13 。
     * 示例 2：
     * 输入：word = "aeeeiiiioooauuuaeiou"
     * 输出：5
     * 解释：最长子字符串是 "aeiou" ，长度为 5 。
     * 示例 3：
     * 输入：word = "a"
     * 输出：0
     * 解释：没有美丽子字符串，所以返回 0 。
     *
     * 提示：
     * 1 <= word.length <= 5 * 105
     * word 只包含字符 'a'，'e'，'i'，'o' 和 'u' 。
     */

    public int longestBeautifulSubstring(String word) {

        if(word.length()<5){
            return 0;
        }

        int maxLength=0;

        int[] dp=new int[word.length()];
        char[] arr = word.toCharArray();

        //base
        dp[0]=(arr[0]=='a')?1:0;

        for (int i = 1; i < arr.length; i++) {

            switch (arr[i]){
                case 'a':
                    if(arr[i-1]=='a'){
                        dp[i]=dp[i-1]+1;
                    }else{
                        dp[i]=1;
                    }
                    break;
                case 'e':
                    if((arr[i-1]=='e'&&dp[i-1]>=2)||(arr[i-1]=='a'&&dp[i-1]>=1)){
                        dp[i]=dp[i-1]+1;
                    }else{
                        dp[i]=0;
                    }
                    break;
                case 'i':
                    if((arr[i-1]=='i'&&dp[i-1]>=3)||(arr[i-1]=='e'&&dp[i-1]>=2)){
                        dp[i]=dp[i-1]+1;
                    }else{
                        dp[i]=0;
                    }
                    break;
                case 'o':
                    if((arr[i-1]=='o'&&dp[i-1]>=4)||(arr[i-1]=='i'&&dp[i-1]>=3)){
                        dp[i]=dp[i-1]+1;
                    }else{
                        dp[i]=0;
                    }
                    break;
                case 'u':
                    if((arr[i-1]=='u'&&dp[i-1]>=5)||(arr[i-1]=='o'&&dp[i-1]>=4)){
                        dp[i]=dp[i-1]+1;
                        maxLength=Math.max(maxLength,dp[i]);
                    }else{
                        dp[i]=0;
                    }
                    break;
            }

        }

        return maxLength;
    }

    public static void main(String[] args) {
        No5740所有元音按顺序排布的最长子字符串 n=new No5740所有元音按顺序排布的最长子字符串();
        int result = n.longestBeautifulSubstring("eauoiouieaaoueiuaieoeauoiaueoiaeoiuieuaoiaeouiaueo");
        System.out.println(result);
    }

}
